package Class对象功能的演示;

import reflect中Class对象的创建.Person;

import java.lang.reflect.Method;

/**
 * @Auther:云尚学Java
 * 获取成员方法
 */


/**
 * 功能描述：
 * 通过此类完成对Class类对象下的成员方法的使用
 * <p>
 * 3. 获取成员方法们：
 * Method[] getMethods()
 * Method getMethod(String name, 类<?>... parameterTypes)
 * <p>
 * Method[] getDeclaredMethods()
 * Method getDeclaredMethod(String name, 类<?>... parameterTypes)
 */
public class ReflectDemo3 {
    public static void main(String[] args) throws Exception{
        //2.类名.class:通过类名的属性class获取
        Class personClass= Person.class;
        System.out.println("2："+personClass);

        System.out.println("=============");
        //一、获取公有无参成员方法
        Method eat_method=personClass.getMethod("eat");
        //public void reflect中Class对象的创建.Person.eat()
        System.out.println(eat_method);
        //执行方法
        Person person=new Person();
        eat_method.invoke(person);

        System.out.println("=============");
        //二、获取公有有参成员方法
        Method eat1_method = personClass.getMethod("eat", String.class);
        System.out.println(eat1_method);
        eat1_method.invoke(person,"米饭");

        System.out.println("所有成员方法===没重写的继承自Object类==========");
        //获取所有的成员方法-------默认继承Object的所有方法
        Method[] methods = personClass.getMethods();
        for (Method method : methods) {
            System.out.println(method+"——"+method.getName());  //方法的名称
        }

        System.out.println("私有成员方法=============");
        //获取私有的成员方法
        Method[] declaredMethods = personClass.getDeclaredMethods();
        //获取私有的方法
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod+"——"+declaredMethod.getName());
        }

        System.out.println("=============");
        String className = personClass.getName();
        System.out.println("personClass:"+personClass);
        System.out.println("className:"+className);
    }
}
